
public class Simbolo {

	public String nombre;
	public int tipoSimbolo;
	public int tipo;
	// Clases de símbolos:
	public static final int
			VAR = 1,
			METODO = 2,
			CLASE = 3;
	// Tipos de datos:
	public static final int
			ENTERO = 1,
			REAL = 2;

	private boolean usado;
	private String cuerpo;

	public Simbolo(String nombre, int tipoSimbolo, int tipo) {
		this.nombre = nombre;
		this.tipoSimbolo = tipoSimbolo;
		this.tipo = tipo;
		if (nombre.equals(MyToken.Salida[MyToken.MAIN]))
		{
			this.usado = true;
		}
	}

	public Simbolo(String nombre, int tipoSimbolo, String cuerpo) {
		this.nombre = nombre;
		this.tipoSimbolo = tipoSimbolo;
		this.cuerpo = cuerpo;

		if (nombre.equals(MyToken.Salida[MyToken.MAIN]))
		{
			this.usado = true;
		}
	}

	public void setUsado()
	{
		usado = true;
	}

	public String ToString(String s)
	{
		if (usado && tipoSimbolo == VAR)
		{
			if (tipo == ENTERO)
			{
				return s + "int " + nombre + ";\n";
			}
			if (tipo == REAL)
			{
				return s + "double " + nombre + ";\n";
			}
		}
		if (usado && tipoSimbolo == METODO)
		{
			return s + cuerpo;
		}
		return "";
	}

	public String ToString(int nivel)
	{
		String s = "";
		for (int i = 0; i < nivel*4; i++)
		{
			s += ' ';
		}
		if (usado && tipoSimbolo == VAR)
		{
			if (tipo == ENTERO)
			{
				return s + "int " + nombre + ";\n";
			}
			if (tipo == REAL)
			{
				return s + "double " + nombre + ";\n";
			}
		}
		if (usado && tipoSimbolo == METODO)
		{
			return s + cuerpo;
		}
		return "";
	}

	public void setCuerpo (String cuerpo)
	{
		this.cuerpo = cuerpo;
	}

}
